<?php

//php5.3版本以上增加	
/*三元运算*/
$page=0;
$page=$page ? $page :1;
echo $page;
//上面的三元运算可以简化
$page2=2;
$page2=$page2?:1;
echo  $page2;

// 添加了类似于js中的匿名函数
/*匿名函数*/
$niming=function(){
	echo "我告诉你whatever";
};

$niming();
// 为什么使用匿名函数
// 当某个需要调用某个接口方法时function a($arr){xxx}方法中传入数组就会执行数组值加1，如果我想要传入一个值让数组值*2，怎么办，不能改接口方法，那只有重写一个方法。匿名函数可以把功能进行独立例子:
echo "<br>";
$arr=array(1,2,3,4,5,6);
function getarrsum($arr){
	foreach ($arr as $key => $value) {
		 $arr[$key]=$value+1;
	}
return $arr;
}
print_r( getarrsum($arr));
//使用匿名函数来回掉可以让方法更加灵活
echo "<br>";
function getarrsum2($arr,$callback){
 foreach ($arr as $key => $value) {
 	$arr[$key]=$callback($value);
 }
 return $arr;
}
$arrys=getarrsum2($arr,function($v){return $v+1;});
print_r($arrys);
echo "<br>";
$arrys2=getarrsum2($arr,function($v){return $v*100;});
print_r($arrys2);

echo "<br>";
//php5.4版本的变化
/*数组*/
$arr=array('a','b','c');
$arr=array('id'=>2,'age'=>4);
//添加了类似于js中数组定义的方法
$arr=['a','b','c'];
$arr=['id'=>2,'age'=>4];

//js中 document.getElementByName('test')[0]获得name为test的第一个节点元素前面类似于一个数据集数组，php也添加了类似
function test(){
	return $arr=['zhai','yu','jin'];
}
echo test()[0];

echo "<br>";
//只想临时使用某个类中的方法，用完就丢，不想把他付给一个变量浪费内存
class dog{
	public function bark(){

		echo "wangwangwang";
	}
}
(new dog())->bark();


//运行直接写进制了
echo "<br>";
echo 0b11111;
echo "<br>";
//trait 萃取特性 php不允许继承多个父类，然而萃取可以模拟继承多个父类
trait gou{
	public function bark(){
		echo "wangwawngwang";
	}
}
trait bird{
public function fly(){
		echo "i can fly";
	}
}
class Super{
	use gou,bird;          //里面必须是trait
}
(new Super())->fly();


?><?php
//短标签的支持需要和html混合
$title="翟玉进";
$content="haohaohao";
?>
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
<h1><?php echo $title;?></h1>
	<p><?php echo $content;?></p>
	<h2>短标签允许你这么写</h2>
	<h1><?=$title?></h1>
	<p><?=$content?></p>
</body>
</html>

<?php 
//php5.5版本的变化
// empty只能判断变量不能判断表达式 php5.5已经可以了
$a=3;
//var_dump(empty($a-3));php5.5可以用来判断表达式
//函数方法一边循环一边使用
// function getAll(){
// 	for($i=1;$i<6;$i++){
// 		yield $i;
// 	}
// }
// foreach (getAll() as $v) {
// 	echo $v,"\n";
// }

//php5.6版本的变化
//常量变化
// const cha=['x','y','z'];//常量可定义在域外嗨可以定义为数组
// echo cha[1];
//可变参数
function add($a,$b){
	$param =func_get_args(); //能够接到函数所有参数
	print_r($param );  //345
	return $a+$b;
}
add(1,2,3,4);
//不想使用上面的方法php5.6所带来的新特性
// function add2($a,$b,...$c){
// 	print_r($c);   //3,4,5
// }
// add2(1,2,3,4,5);



// function test2($a, $b,$c,$d){
// 	echo $a,$b,$c,$d,"\n";
// }
// $num=[2,3,4];
// test(1,...$num);//会把$num自动揭开2,3,4传入

// 
// echo 2**3; 
// echo 2**4;


//php7版本的变化
$page=isset($_GET['page'])? $_GET['page']:1;//过去写法
// $page=$_GET['page'] ?? 1;   //吸取C#
// echo $page;


//php弱类型语言类型比较灵活,新版本可以强制类型
// function add(int $x,int $y):int{
// 	return $x+$y;
// }
// echo add(3,4),"\n";

// echo (new class{   //现场new现场用
// public $leg=4;
// })->leg;
